package pe.gob.minam.sismon.core.dao.impl;

import static pe.gob.minam.sismon.core.util.UtilCore.establecerCondicion;
import static pe.gob.minam.sismon.core.util.UtilCore.establecerParam;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import pe.gob.minam.sismon.core.base.dao.impl.BaseDaoImpl;
import pe.gob.minam.sismon.core.dao.SegPerfilOpcionDao;
import pe.gob.minam.sismon.core.domain.SegPerfilOpcion;
import pe.gob.minam.sismon.core.util.ExceptionCore;

@Repository("segPerfilOpcionDao")
public class SegPerfilOpcionDaoImpl extends BaseDaoImpl<SegPerfilOpcion> implements SegPerfilOpcionDao {

	@SuppressWarnings("unchecked")
	@Override
	public List<SegPerfilOpcion> listarPorPerfil(int idPerfil) throws ExceptionCore {
		
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT p FROM SegPerfilOpcion p inner join fetch p.segOpcion op where 1=1 ");
				
		establecerCondicion(sql, " AND p.segPerfil.idPerfil=:idPerfil", idPerfil);				
		
		Query query = getEntityManager().createQuery(sql.toString());
		
		establecerParam(query, "idPerfil", idPerfil);
		
		return (List<SegPerfilOpcion>) query.getResultList();
	}

	@SuppressWarnings("unchecked")
	@Override
	public SegPerfilOpcion obtener(int idPerfil, int idOpcion)
			throws ExceptionCore {
		
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT p FROM SegPerfilOpcion p where 1=1 ");
				
		establecerCondicion(sql, " AND p.segPerfil.idPerfil=:idPerfil", idPerfil);		
		establecerCondicion(sql, " AND p.segOpcion.idOpcion=:idOpcion", idOpcion);
		
		
		Query query = getEntityManager().createQuery(sql.toString());
		
		establecerParam(query, "idPerfil", idPerfil);
		establecerParam(query, "idOpcion", idOpcion);
		
		List<SegPerfilOpcion> result = (List<SegPerfilOpcion>) query.getResultList();
		
		SegPerfilOpcion perfilOpcionresult = null;
		
		if(result.size()>0){
			perfilOpcionresult = result.get(0);
		}
		
		return perfilOpcionresult;
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<SegPerfilOpcion> listarPorOpcion(Integer idOpcion)
			throws ExceptionCore {
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT p FROM SegPerfilOpcion p inner join fetch p.segOpcion op where 1=1 ");
				
		establecerCondicion(sql, " AND p.segOpcion.idOpcion=:idOpcion", idOpcion);				
		
		Query query = getEntityManager().createQuery(sql.toString());
		
		establecerParam(query, "idOpcion", idOpcion);
		
		return (List<SegPerfilOpcion>) query.getResultList();
	}

	
	
}
